# -*- coding: utf-8 -*-
#Modulos standards de Django
import os.path
import datetime
from mundofacu.settings import MEDIA_ROOT
from datetime import timedelta
from django.db import models
from django.contrib.auth.models import User
#Modulos propios
from mundofacu.foro.models import subforos, threads, posts, tags
from choices import tipo_usuario, genero, tipo_dato, estado_civil, tipo_estado
from clases import transporte


#Creamos los modelos de datos
class paises(models.Model):
	codigo = models.CharField(max_length=50, unique=True)
	nombre = models.CharField(max_length=50, unique=True)
	def __unicode__(self):
			return self.nombre


class provincias(models.Model):
	nombre = models.CharField(max_length=50)
	pais = models.ForeignKey(paises)
	class Meta:
		unique_together = [("nombre", "pais")]
	def __unicode__(self):
			return self.nombre


class localidades(models.Model):
	nombre = models.CharField(max_length=50, unique=True)
	codigo_postal = models.CharField(max_length=25)
	provincia = models.ForeignKey(provincias)
	def __unicode__(self):
			return self.nombre


class perfil(models.Model):
	user = models.ForeignKey(User, unique=True)
	tipo_usuario = models.IntegerField(choices= tipo_usuario, null=False, default="1")
	fecha_nacimiento = models.DateField(null=True, default=datetime.date.today())
	localidad = models.ForeignKey(localidades, null=True, default=1)
	puntaje = models.IntegerField(default=0)
	def __unicode__(self):
		return self.user.username
	def datos(self):
		dato= []
		dato.append(transporte('Nombre',self.user.first_name))
		dato.append(transporte('Apellido',self.user.last_name))
		dato.append(transporte('Fecha de Nacimiento',self.fecha_nacimiento))
		dato.append(transporte('Tipo Usuario',tipo_usuario[self.tipo_usuario][1]))
		dato.append(transporte('Localidad',self.localidad.nombre))
		for item in slim_string.objects.filter(user=self.user).all(): #Falta filtrar por mostrar
			dato.append(transporte(tipo_dato[item.tipo_dato][1],item.valor))
		dato.append(transporte('Puntaje',self.puntaje))
		dato.append(transporte("Cantidad de Threads",threads.objects.filter(autor=self.user).count()))
		dato.append(transporte("Cantidad de Posts",posts.objects.filter(autor=self.user).count()))
		return dato
	def pic(self):
		if os.path.isfile(MEDIA_ROOT +"/profiles/"+self.user.username + ".jpeg"):	return (self.user.username+".jpeg")
		else: return "not.jpeg"
	def get_threads(self,cant):
		return threads.objects.filter(autor=self.user.id).all()[::-1][:cant]#No es necesario el
	def get_posts(self,cant):
		return posts.objects.filter(autor=self.user.id).all()[::-1][:cant]


class facultades(models.Model):
	nombre = models.CharField(max_length=50, unique=True)
	direccion = models.CharField(max_length=50)
	contacto = models.EmailField()
	localidad = models.ForeignKey(localidades)
	def __unicode__(self):
			return self.nombre


class carreras(models.Model):
	numero = models.IntegerField()
	nombre = models.CharField(max_length=50)
	facultad = models.ForeignKey(facultades)
	descripcion = models.CharField(max_length=100)
	voicename = models.CharField(max_length=15)
	class Meta:
		unique_together = [("numero","nombre","facultad")]
	def __unicode__(self):
			return self.nombre


class moderador_subforo(models.Model):
	user = models.ForeignKey(User)
	subforo = models.ForeignKey(subforos)
	class Meta:
		unique_together = [("user","subforo")]


class amonestaciones(models.Model):
	user = models.ForeignKey(User, related_name='amonestado')
	autor= models.ForeignKey(User, related_name='amonestador')
	thread = models.ForeignKey(threads, null=True)
	post = models.ForeignKey(posts, null=True)
	desde = models.DateField(default=datetime.date.today())
	hasta = models.DateField()
	estado = models.IntegerField(choices=tipo_estado)
	descripcion = models.CharField(max_length=150)
	def __unicode__(self):
			return ("Contra: " + self.raiz().__class__.__name__ + " " + str(self.raiz().id) + ", " + tipo_estado[self.estado][1] +  " Hasta: " + str(self.hasta))
	def raiz(self):
		if self.thread != None: return self.thread
		else: return self.post
	def raizname(self):
		return self.raiz().__class__.__name__
	def estado_str(self):
		return tipo_estado[self.estado][1]
	def asignar(self, x):
		if isinstance(x, posts): self.post = x
		else: self.thread = x
	def duracion(self, dias):
		self.hasta= datetime.date.today() + timedelta(days=+int(dias))
		self.save()


class slim_string(models.Model):
	user = models.ForeignKey(User)
	tipo_dato = models.IntegerField(choices=tipo_dato)
	valor = models.CharField(max_length=50)
	mostrar = models.BooleanField(default=False)
	class Meta:
		unique_together = [("user", "tipo_dato", "valor")]


class user_carrera(models.Model):
	user = models.ForeignKey(User)
	carrera = models.ForeignKey(carreras)
	mostrar = models.BooleanField(default=True)
	class Meta:
		unique_together = [("user","carrera")]


class user_tag(models.Model):
	user = models.ForeignKey(User)
	tag = models.ForeignKey(tags)
	class Meta:
		unique_together = [("user", "tag")]


class user_notificacion(models.Model):
	user_receptor = models.ForeignKey(User, related_name='user_receptor')
	user_emisor = models.ForeignKey(User, related_name='user_emisor')
	activo = models.BooleanField()
	class Meta:
		unique_together = [("user_receptor", "user_emisor")]


class user_lectura(models.Model):
	user = models.ForeignKey(User)
	thread = models.ForeignKey(threads)
	class Meta:
		unique_together = [("user","thread")]


class thread_notificacion(models.Model):
	user = models.ForeignKey(User)
	thread = models.ForeignKey(threads)
	activo = models.BooleanField()
	class Meta:
		unique_together = [("user","thread")]


class mensajes(models.Model):
	asunto = models.CharField(max_length=50)
	texto = models.CharField(max_length=500)
	receptor= models.ForeignKey(User, related_name='receptor')
	emisor= models.ForeignKey(User,related_name='emisor')
	leido=models.BooleanField(default=False)
	fecha= models.DateField(default=datetime.date.today())
	activo = models.BooleanField(default=True)
	def __unicode__(self):
		return ("Asunto: "+ self.asunto + "- From: " + self.emisor.username)